// src/utils/error.rs

//! 自定义错误类型

use thiserror::Error;

/// 应用程序错误类型
#[derive(Error, Debug)]
pub enum IndustryAgentError {
    #[error("配置错误: {0}")]
    Config(String),

    #[error("网络错误: {0}")]
    Network(#[from] reqwest::Error),

    #[error("数据库错误: {0}")]
    Database(String),

    #[error("序列化错误: {0}")]
    Serialization(#[from] serde_json::Error),

    #[error("IO错误: {0}")]
    Io(#[from] std::io::Error),

    #[error("OPC UA错误: {0}")]
    Opcua(String),

    #[error("语义转换错误: {0}")]
    SemanticConversion(String),

    #[error("验证错误: {0}")]
    Validation(String),

    #[error("认证错误: {0}")]
    Authentication(String),

    #[error("权限错误: {0}")]
    Permission(String),

    #[error("未找到: {0}")]
    NotFound(String),

    #[error("内部错误: {0}")]
    Internal(String),
}

/// 结果类型
pub type Result<T> = std::result::Result<T, IndustryAgentError>;